IF OBJECT_ID ( 'FYAO_InsertPerfil_MenuxPerfil', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertPerfil_MenuxPerfil
GO
CREATE PROCEDURE FYAO_InsertPerfil_MenuxPerfil
@DescripcionPerfil varchar(50),
@Estado bit,
@XML    XML
AS
BEGIN
DECLARE @PerfilID int
	BEGIN TRY
		BEGIN TRANSACTION
		INSERT INTO PERFIL
			(DescripcionPerfil,Estado)
			VALUES(@DescripcionPerfil,@Estado)
	 set @PerfilID=@@IDENTITY

			INSERT INTO MenuXPerfil 
			(MenuID,PerfilID)
			SELECT 				
				MenuID   = T.Item.value('@MenuID', 'int'),
				@PerfilID				
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_UpdatePerfil_MenuxPerfil', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_UpdatePerfil_MenuxPerfil
GO
CREATE PROCEDURE FYAO_UpdatePerfil_MenuxPerfil
@PerfilID int,
@DescripcionPerfil varchar(50),
@XML    XML
AS
BEGIN
	BEGIN TRY
		BEGIN TRANSACTION
		UPDATE PERFIL SET DESCRIPCIONPERFIL=@DescripcionPerfil where PerfilID=@PerfilID
		DELETE FROM MENUXPERFIL WHERE PerfilID=@PerfilID

			INSERT INTO MENUXPERFIL 
			(MenuID,PerfilID)
			SELECT 				
				MenuID   = T.Item.value('@MenuID', 'int'),
				PerfilID = T.Item.value('@PerfilID', 'int')				
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_getUsersByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getUsersByFiler
GO
CREATE PROCEDURE FYAO_getUsersByFiler --'A','D',1
 @Nombres	  varchar(30),      
 @Apellidos   varchar(100),      
 @Estado      bit
AS      
BEGIN  
	SELECT US.USUARIOID, US.NOMBRE,US.APELLIDOPATERNO,US.APELLIDOMATERNO,US.TELEFONO,US.USERNAME,US.PASSWORD,US.FECHACREACION,US.ESTADO,US.PERFILID,UPPER(PERF.DESCRIPCIONPERFIL) DESCRIPCIONPERFIL 
	FROM USUARIO US INNER JOIN PERFIL PERF ON US.PERFILID=PERF.PERFILID 
	WHERE 
	(UPPER(US.NOMBRE) LIKE '%'+ UPPER(@Nombres) + '%' OR  @Nombres='0') AND
	(UPPER(US.APELLIDOPATERNO + ' ' + US.APELLIDOMATERNO) LIKE '%'+ UPPER(@Apellidos) + '%' OR  @Apellidos='0') AND
	US.ESTADO=@Estado 
	ORDER BY 2,3 
END
GO
IF OBJECT_ID ( 'FYAO_getProductsByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getProductsByFiler
GO
CREATE PROCEDURE FYAO_getProductsByFiler --'0','0','0',1
 @Codigo     	  varchar(50),      
 @Caracteristica  varchar(50),
 @Descripcion	  varchar(100),            
 @Estado      bit
AS      
BEGIN  
	SELECT ProductoID,CodigoProducto,Caracteristica,Caracteristica2,DescripcionProducto,isnull(Precio,0) Precio,
	isnull(Descuento,0) Descuento,isnull(Alto,0) Alto,isnull(Ancho,0) Ancho,isnull(Cantidad,0) Cantidad,CategoriaAuto,
	isnull(EsParabrisaFrontal,0) EsParabrisaFrontal,Estado
	FROM Producto   
	WHERE 
	(UPPER(CodigoProducto) LIKE '%'+ UPPER(@Codigo) + '%' OR  @Codigo='0') AND
	(UPPER(Caracteristica) LIKE '%'+ UPPER(@Caracteristica) + '%' OR  @Caracteristica='0') AND
	(UPPER(DescripcionProducto) LIKE '%'+ UPPER(@Descripcion) + '%' OR  @Descripcion='0') AND
	ESTADO=@Estado 
	ORDER BY 2,3 
END
GO
IF OBJECT_ID ( 'FYAO_getVendedorByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getVendedorByFiler
GO
CREATE PROCEDURE FYAO_getVendedorByFiler --'0','0','0',1
 @NombreVendedor    varchar(40),      
 @ApellidoVendedor	varchar(50),
 @Estado      bit
AS      
BEGIN  
	SELECT VendedorID,NombreVendedor,ApellidoVendedor,Estado
	FROM Vendedor   
	WHERE 
	(UPPER(NombreVendedor) LIKE '%'+ UPPER(@NombreVendedor) + '%' OR  @NombreVendedor='0') AND
	(UPPER(ApellidoVendedor) LIKE '%'+ UPPER(@ApellidoVendedor) + '%' OR  @ApellidoVendedor='0') AND
	ESTADO=@Estado 
	ORDER BY 2,3 
END
GO
IF OBJECT_ID ( 'FYAO_getClienteByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getClienteByFiler
GO
CREATE PROCEDURE FYAO_getClienteByFiler --'0','0','0',1
 @Codigo     varchar(20),      
 @Nombre	 varchar(100),
 @VendedorID int,
 @Estado     bit
AS      
BEGIN  
	SELECT Cli.ClienteID,Cli.CodigoCliente,Cli.NombreCliente,Dir.Direccion,Cli.DNI,Cli.RUC,Cli.Telefono,Cli.Estado,
	Cli.VendedorID,(Ven.NombreVendedor + ' ' + Ven.ApellidoVendedor) VendedorNombre,
	case when Dir.EsPrincipal= 1 then 'SI' else 'NO' end IsPrincipalDesc
	FROM   dbo.Cliente Cli left join dbo.Vendedor Ven on Cli.VendedorID=Ven.VendedorID
	left join Direccion Dir on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1)
	WHERE 
	(UPPER(Cli.CodigoCliente) LIKE '%'+ UPPER(@Codigo) + '%' OR  @Codigo='0') AND
	(UPPER(Cli.NombreCliente) LIKE '%'+ UPPER(@Nombre) + '%' OR  @Nombre='0') AND
	(UPPER(Cli.VendedorID)=@VendedorID OR  @VendedorID=0) AND
	Cli.ESTADO=@Estado 
	ORDER BY 2,3 
END
GO
IF OBJECT_ID ( 'FYAO_getClienteByFilerAllAddress', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getClienteByFilerAllAddress
GO
CREATE PROCEDURE FYAO_getClienteByFilerAllAddress --'0','0','0',1
 @Codigo     varchar(20),      
 @Nombre	 varchar(100),
 @Estado     bit
AS      
BEGIN  
	SELECT Cli.ClienteID,Cli.CodigoCliente,Cli.NombreCliente,Dir.Direccion,Cli.DNI,Cli.RUC,Cli.Telefono,Cli.Estado,
	Cli.VendedorID,(Ven.NombreVendedor + ' ' + Ven.ApellidoVendedor) VendedorNombre,
	case when Dir.EsPrincipal= 1 then 'SI' else 'NO' end IsPrincipalDesc
	FROM   dbo.Cliente Cli left join dbo.Vendedor Ven on Cli.VendedorID=Ven.VendedorID
	inner join Direccion Dir on (Cli.ClienteID=Dir.ClienteID)
	WHERE 
	(UPPER(Cli.CodigoCliente) LIKE '%'+ UPPER(@Codigo) + '%' OR  @Codigo='0') AND
	(UPPER(Cli.NombreCliente) LIKE '%'+ UPPER(@Nombre) + '%' OR  @Nombre='0') AND
	Cli.ESTADO=@Estado 
	ORDER BY 2,3 
END
GO
IF OBJECT_ID ( 'FYAO_InsertCliente', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertCliente
GO
CREATE PROCEDURE FYAO_InsertCliente
@CodigoCliente varchar(20),
@NombreCliente varchar(100),
@RUC           varchar(11),
@DNI           varchar(10),
@Telefono      varchar(50),
@VendedorID    int,
@CreadoPor	   int,
@XML    XML

AS      
BEGIN  
DECLARE @CLIENTEID int
	BEGIN TRY
		BEGIN TRANSACTION	
		INSERT INTO DBO.CLIENTE (CODIGOCLIENTE, NOMBRECLIENTE,RUC,DNI, TELEFONO,ESTADO,VENDEDORID,FECHACREACION,CREADOPOR)
		VALUES (@CODIGOCLIENTE,@NOMBRECLIENTE,@RUC,@DNI,@TELEFONO, 1,@VENDEDORID,GETDATE(),@CREADOPOR)
		SET @CLIENTEID = SCOPE_IDENTITY()
		
		INSERT INTO Direccion
			(Direccion,ClienteID,DepartamentoID,ProvinciaID,EsPrincipal,DistritoID)
			SELECT 				
				Direccion   = T.Item.value('@Direccion', 'varchar(200)'),
				@CLIENTEID,
				DepartamentoID   = T.Item.value('@DepartamentoID', 'int'),
				ProvinciaID   = T.Item.value('@ProvinciaID', 'int'),
				EsPrincipal   = T.Item.value('@EsPrincipal', 'bit'),
				DistritoID   = T.Item.value('@DistritoID', 'int')
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)

			UPDATE CLIENTE SET DIRECCION=(SELECT DR.DIRECCION FROM DBO.DIRECCION DR WHERE DR.CLIENTEID=@CLIENTEID AND DR.ESPRINCIPAL=1)
			WHERE CLIENTEID=@CLIENTEID 	
			COMMIT TRANSACTION
		SELECT CONVERT(INT,@CLIENTEID)
		RETURN @CLIENTEID 		
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_UpdateCliente', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_UpdateCliente
GO
CREATE PROCEDURE FYAO_UpdateCliente
@ClienteID     int,
@CodigoCliente varchar(20),
@NombreCliente varchar(100),
@RUC           varchar(11),
@DNI           varchar(10),
@Telefono      varchar(50),
@VendedorID    int,
@MODIFICADOPOR int,
@Estado		   bit,
@XML    XML

AS      
BEGIN  
	BEGIN TRY
		BEGIN TRANSACTION
		--ACTUALIZAMOS LA TABLA CLIENTE	
		UPDATE DBO.CLIENTE SET CODIGOCLIENTE=@CODIGOCLIENTE, NOMBRECLIENTE=@NOMBRECLIENTE, 
		RUC=@RUC,DNI=@DNI,TELEFONO=@TELEFONO, ESTADO=@ESTADO,
		VENDEDORID=@VENDEDORID,FECHAMODIFICACION=GETDATE(),MODIFICADOPOR=@MODIFICADOPOR
		WHERE CLIENTEID = @CLIENTEID 
		--ELIMINAMOS LAS DIRECCIONES ASOCIADAS AL CLIENTE		
		DELETE FROM DIRECCION WHERE CLIENTEID=@CLIENTEID		
		--INSERTAMOS LAS NUEVAS DIRECCIONES ASOCIADAS		
		INSERT INTO Direccion
			(Direccion,ClienteID,DepartamentoID,ProvinciaID,EsPrincipal,DistritoID)
			SELECT 				
				Direccion   = T.Item.value('@Direccion', 'varchar(200)'),
				ClienteID   = T.Item.value('@ClienteID', 'int'),
				DepartamentoID   = T.Item.value('@DepartamentoID', 'int'),
				ProvinciaID   = T.Item.value('@ProvinciaID', 'int'),
				EsPrincipal   = T.Item.value('@EsPrincipal', 'bit'),
				DistritoID   = T.Item.value('@DistritoID', 'int')
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)	

			UPDATE CLIENTE SET DIRECCION=(SELECT DR.DIRECCION FROM DBO.DIRECCION DR WHERE DR.CLIENTEID=@CLIENTEID AND DR.ESPRINCIPAL=1)
			WHERE CLIENTEID=@CLIENTEID 
			COMMIT TRANSACTION	
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
------------------------parametro
IF OBJECT_ID ( 'FYAO_InsertParametroList', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertParametroList
GO
CREATE PROCEDURE FYAO_InsertParametroList
@XML    XML
AS
BEGIN
	BEGIN TRY
		BEGIN TRANSACTION

			INSERT INTO Parametro
			(TableName,Nombre,Valor,Notas,CreadoPor,FechaCreacion)
			SELECT 				
				TableName   = T.Item.value('@TableName', 'varchar(50)'),
				Nombre   = T.Item.value('@Nombre', 'varchar(50)'),
				Valor   = T.Item.value('@Valor', 'varchar(50)'),
				Notas   = T.Item.value('@Notas', 'varchar(100)'),
				CreadoPor   = T.Item.value('@CreadoPor', 'int'),
				FechaCreacion   = GETDATE()
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO

IF OBJECT_ID ( 'FYAO_UpdateParametroList', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_UpdateParametroList
GO
CREATE PROCEDURE FYAO_UpdateParametroList
@XML    XML
AS
BEGIN
	BEGIN TRY
		BEGIN TRANSACTION

			UPDATE p 
			SET p.Nombre = xl.Nombre, p.TableName = xl.TableName, p.Valor = xl.Valor, p.Notas = xl.Notas,  p.ModificadoPor = xl.ModificadoPor, p.FechaModificacion = GETDATE()
			FROM Parametro p
			INNER JOIN 
			(
				SELECT 	
				ParametroID = T.Item.value('@ParametroID', 'int'),
				TableName   = T.Item.value('@TableName', 'varchar(50)'),
				Nombre   = T.Item.value('@Nombre', 'varchar(50)'),
				Valor   = T.Item.value('@Valor', 'varchar(50)'),
				Notas   = T.Item.value('@Notas', 'varchar(100)'),
				ModificadoPor   = T.Item.value('@ModificadoPor', 'int')
				FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
			)xl ON xl.ParametroID = p.ParametroID

		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO

----------------------venta-------------------
IF OBJECT_ID ( 'FYAO_InsertVenta', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertVenta
GO

--INSERT INTO VENTA 
--		(ClienteID,MontoTotal,TipoVenta,TipoMoneda,Descuento,VendedorID,PedidoID,Estado,GuiaRemisionID,IGV,Serie,FechaPago,
--		CreadoPor,NroVenta,Observaciones, FechaCreacion)
--		VALUES
--		(7,468.46,'F',5,0,1,null,1,null,18,1,null,
--		2,23123,'SADFASDFASFD',GetDate())

--EXEC FYAO_InsertVenta 
--7,		 --@ClienteID
--468.46,	 --@MontoTotal 
--'F',	 --@TipoVenta
--5,		 --@TipoMoneda
--0,		--@Descuento
--1,		--@VendedorID
--NULL,	--@PedidoID
--1,	--@Estado
--NULL,	--@GuiaRemisionID
--18,	--@IGV
--1,	--@Serie
--NULL,	--@FechaPago
--2, --@CreadoPor
--23123,	--@NroVenta
--'SADFASDFASFD',	--@Observaciones
--'<ITEMS>
--  <ITEM ProductoID="5" Cantidad="10" Precio="20" Descuento="1" />
--  <ITEM ProductoID="4" Cantidad="20" Precio="10" Descuento="2" />
--</ITEMS>'

CREATE PROCEDURE FYAO_InsertVenta
@ClienteID int,
@MontoTotal decimal,
@TipoVenta varchar(1),
@TipoMoneda int,
@Descuento decimal,
@VendedorID int,
@PedidoID int = null,
@Estado int,
@FormaPago int,
@GuiaRemisionID int = null,
@IGV decimal,
@Serie varchar(3),
@FechaPago datetime = null,
@CreadoPor int,
@NroVenta varchar(10),
@Observaciones varchar(200),
@XML    XML
AS
BEGIN
DECLARE @VentaID int
	BEGIN TRY
		BEGIN TRANSACTION
		INSERT INTO VENTA 
			(ClienteID,MontoTotal,TipoVenta,TipoMoneda,Descuento,VendedorID,PedidoID,Estado,FormaPago,GuiaRemisionID,IGV,Serie,FechaPago,
			CreadoPor,NroVenta,Observaciones, FechaCreacion)
			VALUES
			(@ClienteID,@MontoTotal,@TipoVenta,@TipoMoneda,@Descuento,@VendedorID,@PedidoID,@Estado,@FormaPago,@GuiaRemisionID,@IGV,@Serie,@FechaPago,
			@CreadoPor,@NroVenta,@Observaciones,GetDate())
			
		 set @VentaID=@@IDENTITY
		 
			INSERT INTO DetalleVenta
			(ProductoID,VentaID,Cantidad,PrecioUnitario,Descuento)
			SELECT 				
				ProductoID   = T.Item.value('@ProductoID', 'int'),
				@VentaID,
				Cantidad   = T.Item.value('@Cantidad', 'int'),
				PrecioUnitario   = T.Item.value('@PrecioUnitario', 'decimal'),
				Descuento   = T.Item.value('@Descuento', 'decimal')
			FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)

			if @TipoVenta='F'
			BEGIN
				UPDATE 	Parametro SET Valor=(CAST(ISNULL(Valor,'0') AS INT)+1)
				WHERE	Nombre='NumeroFactura'	
			END
			ELSE
			BEGIN
				UPDATE 	Parametro SET Valor=(CAST(ISNULL(Valor,'0') AS INT)+1)
				WHERE	Nombre='NumeroBoleta'
			END
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO

IF OBJECT_ID ( 'FYAO_UpdateVenta', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_UpdateVenta
GO

CREATE PROCEDURE FYAO_UpdateVenta
@VentaID int, 
@ClienteID int,
@MontoTotal decimal,
@TipoVenta varchar(1),
@TipoMoneda int,
@Descuento decimal,
@VendedorID int,
@PedidoID int = null,
@Estado int,
@FormaPago int,
@GuiaRemisionID int = null,
@IGV decimal,
@Serie varchar(3),
@FechaPago datetime = null,
@ModificadoPor int,
@NroVenta varchar(10),
@Observaciones varchar(200),
@XML    XML
AS
BEGIN
	BEGIN TRY
		BEGIN TRANSACTION

		UPDATE [DB_FUYAO].[dbo].[Venta]
		   SET [ClienteID] = @ClienteID
			  ,[MontoTotal] =@MontoTotal
			  ,[TipoVenta] = @TipoVenta
			  ,[Descuento] = @Descuento
			  ,[VendedorID] = @VendedorID
			  ,[PedidoID] = @PedidoID
			  ,[Estado] = @Estado
			  ,[FormaPago] = @FormaPago
			  ,[GuiaRemisionID] = @GuiaRemisionID
			  ,[IGV] = @IGV
			  ,[Serie] = @Serie
			  ,[FechaPago] = @FechaPago
			  ,[FechaModificacion] = GETDATE()
			  ,[ModificadoPor] = @ModificadoPor
			  ,[NroVenta] = @NroVenta
			  ,[Observaciones] = @Observaciones
			  ,[TipoMoneda] = @TipoMoneda
		 WHERE VentaID = @VentaID
		 
		DELETE FROM DetalleVenta WHERE VentaID = @VentaID
		
		INSERT INTO DetalleVenta
		(ProductoID,VentaID,Cantidad,PrecioUnitario,Descuento)
		SELECT 				
			ProductoID   = T.Item.value('@ProductoID', 'int'),
			@VentaID,
			Cantidad   = T.Item.value('@Cantidad', 'int'),
			Precio   = T.Item.value('@PrecioUnitario', 'decimal'),
			Descuento   = T.Item.value('@Descuento', 'decimal')
		FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_InsertGuiaInterna', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertGuiaInterna
GO
CREATE PROCEDURE FYAO_InsertGuiaInterna
@ClienteID	   int,
/*@NombreCliente VarChar(100),
@Telefono      VarChar(10),
@Direccion     VarChar(50),
@DNI		   VarChar(10),
@RUC		   VarChar(11),*/
@CreadoPor	   int,
@NroPedido     VarChar(20),
@ManejadoPor   VarChar(50),
@Observacion   VarChar(200),
@XML    XML
AS
BEGIN
DECLARE @PedidoId int
--DECLARE @ClienteNewId int
SET @PedidoId=0
	BEGIN TRY	   
		BEGIN TRANSACTION
		/*--SI EL CODIGO ES 0 SE CREA UN NUEVO CLIENTE		
		   IF @ClienteID = 0 
		   BEGIN
			  INSERT INTO CLIENTE
				(NOMBRECLIENTE,DIRECCION,RUC,DNI,TELEFONO,CREADOPOR,FECHACREACION,ESTADO)
				VALUES(@NombreCliente,@Direccion,@RUC,@DNI,@Telefono,@CreadoPor,GETDATE(),1)
				SET @ClienteNewId=SCOPE_IDENTITY()
				SET @ClienteID=@ClienteNewId
		   END
		*/
	--SE INGRESA EL PEDIDO
	INSERT INTO PEDIDO
	(CLIENTEID,ESTADO,OBSERVACION,FECHACREACION,CREADOPOR,NROPEDIDO,MANEJADOPOR)
	VALUES(@ClienteID,1,@Observacion,GETDATE(),@CreadoPor,@NroPedido,@ManejadoPor)
	SET @PedidoId=SCOPE_IDENTITY()
	--SE INGRESA EL DETALLE DEL PEDIDO
		INSERT INTO DETALLEPEDIDO 
		(PEDIDOID,PRODUCTOID,CANTIDAD,PRECIOUNITARIO)
		SELECT
			@PedidoId,							
			PRODUCTOID   = T.Item.value('@ProductoID', 'int'),
			CANTIDAD	 = T.Item.value('@Cantidad', 'int'),	
			PRECIOUNITARIO = T.Item.value('@PrecioUnitario', 'decimal(8,2)')			
		FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
	--SE ACTUALIZA EL VALOR DEL ULTIMO NUMERO DE GUIA INTERNA EN LA TABLA PARAMETRO
	UPDATE 	Parametro SET Valor=(CAST(ISNULL(Valor,'0') AS INT)+1)
	WHERE	Nombre='NumeroGuiaInterna'	
	COMMIT TRANSACTION
		
		SELECT CONVERT(INT,@PedidoId)
		RETURN @PedidoId 
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_getGuiaInternaByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getGuiaInternaByFiler
GO
CREATE PROCEDURE FYAO_getGuiaInternaByFiler --'0','0','0',1
 @NroGuia	  varchar(6),
 @Cliente	  varchar(100),  
 @VendedorID  int,    
 @DateIni	  datetime,      
 @DateFin	  datetime,          
 @Estado      int
AS      
BEGIN  
	select Ped.PedidoID,Ped.NroPedido,right('000000' + cast(Ped.NroPedido as varchar(6)), 6) NroPedidoDesc,Ped.ClienteID,Cli.NombreCliente,Ped.FechaCreacion,Ped.ManejadoPor,PD.Total,Ped.Estado,Par.Nombre DescEstado,
		Ped.Observacion,Cli.DNI,cli.RUC,Cli.Direccion,Cli.Telefono,(Vend.NombreVendedor + ' ' + Vend.ApellidoVendedor) Vendedor
	from dbo.Pedido Ped inner join dbo.Cliente Cli 
	on   Ped.ClienteID = Cli.ClienteID inner join Parametro Par
	on   Ped.Estado = Par.Valor and Par.TableName='GUIA INTERNA' left join dbo.Vendedor Vend
	on   Cli.VendedorID = Vend.VendedorID
	inner join
		(select Dp.PedidoID,Sum((Dp.PrecioUnitario*Dp.Cantidad)) Total
		from DetallePedido Dp
		group by Dp.PedidoID)PD
	on Ped.PedidoID=PD.PedidoID
	where 
	(Ped.NroPedido LIKE '%'+ @NroGuia + '%' OR  @NroGuia='0') and
	(cast(Ped.FechaCreacion as DATE)  BETWEEN cast(@DateIni as DATE)   AND cast(@DateFin as DATE)) and 
	(UPPER(Cli.NombreCliente) LIKE '%'+ UPPER(@Cliente) + '%' OR  @Cliente='0') AND
	(UPPER(Cli.VendedorID)=@VendedorID OR  @VendedorID=0) AND
	Ped.Estado=@Estado 
END
GO
IF OBJECT_ID ( 'FYAO_getAllDetallePedidoByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getAllDetallePedidoByFiler
GO
CREATE PROCEDURE FYAO_getAllDetallePedidoByFiler --'0','0','0',1
 @PEDIDO	  Int
AS
BEGIN
SELECT DP.PEDIDOID,DP.PRODUCTOID,PR.CODIGOPRODUCTO,PR.DESCRIPCIONPRODUCTO,
	   DP.CANTIDAD,DP.PRECIOUNITARIO,(DP.CANTIDAD*DP.PRECIOUNITARIO) IMPORTE
FROM DETALLEPEDIDO DP INNER JOIN PRODUCTO PR
ON DP.PRODUCTOID=PR.PRODUCTOID
WHERE DP.PEDIDOID=@PEDIDO
END
go
IF OBJECT_ID ( 'FYAO_InsertGuiaRemision', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_InsertGuiaRemision
GO
CREATE PROCEDURE FYAO_InsertGuiaRemision
@ClienteID	      int,
@NroGuiaRemision  int,
@NroComprobante   int,
@TipoComprobante  char(1),
@NroPedido		  int,
@CreadoPor		  int,
@PuntoPartida	  VarChar(100),
@PuntoLlegada	  VarChar(100),
@PuntoLlegadaDep  Varchar(50),
@PuntoLlegadaProv Varchar(100),
@PuntoLlegadaDist Varchar(50),
@ModeloAuto	      VarChar(100),
@PlacaAuto	      VarChar(10),
@LC			      VarChar(10),
@NombreConductor  varchar(100),
@NombreTransportista varchar(100),
@RucTransportista VarChar(11),
@Serie            varchar(3),
@FechaIniTraslado datetime,
@MotivoTraslado   int,
@XML    XML
AS
BEGIN
DECLARE @GuiaRemisionID int
SET @GuiaRemisionID=0
	BEGIN TRY	   
		BEGIN TRANSACTION
	--SE INGRESA LA CABECERA
	INSERT INTO GuiaRemision
	(ClienteID,ESTADO,NroGuiaRemision,NroVenta1,FechaCreacion,CreadoPor,PuntoPartida,PuntoLlegada,ModeloAuto,PlacaAuto,
	Brevete,NombreConductor,Serie,FechaIniTraslado,NombreTransportista,RUCTransportista,MotivoTraslado,NroPedido,TipoComprobante,PuntoLlegadaDep,PuntoLlegadaProv,PuntoLlegadaDist)
	VALUES(@ClienteID,1,@NroGuiaRemision,@NroComprobante,GETDATE(),@CreadoPor,@PuntoPartida,@PuntoLlegada,@ModeloAuto,
	@PlacaAuto,@LC,@NombreConductor,@Serie,@FechaIniTraslado,@NombreTransportista,@RucTransportista,@MotivoTraslado,@NroPedido,@TipoComprobante,@PuntoLlegadaDep,@PuntoLlegadaProv,@PuntoLlegadaDist)
	SET @GuiaRemisionID=SCOPE_IDENTITY()
	--SE INGRESA EL DETALLE DE LA GUIA
		INSERT INTO DetalleGuiaRemision 
		(ProductoID,GuiaRemisionID,CANTIDAD)
		SELECT
			PRODUCTOID   = T.Item.value('@ProductoID', 'int'),
			@GuiaRemisionID,					
			CANTIDAD	 = T.Item.value('@Cantidad', 'int')			
		FROM   @XML.nodes('ITEMS/ITEM') AS T(Item)
	--SE ACTUALIZA EL VALOR DEL ULTIMO NUMERO DE GUIA REMISION EN LA TABLA PARAMETRO
	UPDATE 	Parametro SET Valor=(CAST(ISNULL(Valor,'0') AS INT)+1)
	WHERE	Nombre='NumeroGuiaRemision'	
	COMMIT TRANSACTION
		
		SELECT CONVERT(INT,@GuiaRemisionID)
		RETURN @GuiaRemisionID 
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
	END CATCH
END
GO
IF OBJECT_ID ( 'FYAO_getConductorByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getConductorByFiler
GO
CREATE PROCEDURE FYAO_getConductorByFiler --'0','0','0',1
 @NombreConductor    varchar(30),      
 @ApellidoConductor	 varchar(100),
 @LicenciaConducir	 varchar(10),
 @Estado      bit
AS      
BEGIN  
	SELECT ConductorID,NombreConductor,ApellidoConductor,LicenciaConducir,Estado
	FROM Conductor   
	WHERE 
	(UPPER(NombreConductor) LIKE '%'+ UPPER(@NombreConductor) + '%' OR  @NombreConductor='0') AND
	(UPPER(ApellidoConductor) LIKE '%'+ UPPER(@ApellidoConductor) + '%' OR  @ApellidoConductor='0') AND
	(UPPER(LicenciaConducir) LIKE '%'+ UPPER(@LicenciaConducir) + '%' OR  @LicenciaConducir='0') AND
	ESTADO=@Estado 
	ORDER BY 2,3 
END
GO		
IF OBJECT_ID ( 'FYAO_getGuiaRemisionByFiler', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getGuiaRemisionByFiler
GO
CREATE PROCEDURE FYAO_getGuiaRemisionByFiler --'0','0','0',1
 @NroGuiaRemision	  int,
 @Cliente		      varchar(100),      
 @DateIni			  datetime,      
 @DateFin			  datetime,          
 @NombreConductor    varchar(50)
AS      
BEGIN  
select Gr.GuiaRemisionID,Gr.NroGuiaRemision,right('000000' + cast(Gr.NroGuiaRemision as varchar(6)), 6) NroGuiaRemisionDesc,
Gr.ClienteID,Cli.NombreCliente,GR.PuntoLlegada Direccion,Gr.FechaCreacion,Gr.NombreConductor,PD.CantidadTotal
from GuiaRemision GR inner join dbo.Cliente Cli 
on Gr.ClienteID=Cli.ClienteID /*inner join Direccion Dir 
on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1)*/
inner join
		(select Dg.GuiaRemisionID,Sum(Dg.Cantidad) CantidadTotal
		from DetalleGuiaRemision Dg
		group by Dg.GuiaRemisionID)PD
	on Gr.GuiaRemisionID=PD.GuiaRemisionID
where 
	--(Gr.GuiaRemisionID LIKE '%'+ @NroGuiaRemision + '%' OR  @NroGuiaRemision='0') and
	(Gr.NroGuiaRemision=@NroGuiaRemision OR  @NroGuiaRemision='0') and  
	(cast(Gr.FechaCreacion as DATE)  BETWEEN cast(@DateIni as DATE)   AND cast(@DateFin as DATE)) and 
	(UPPER(Cli.NombreCliente) LIKE '%'+ UPPER(@Cliente) + '%' OR  @Cliente='0') AND
	(Gr.NombreConductor LIKE '%'+ @NombreConductor + '%' OR  @NombreConductor='0')
END
GO
IF OBJECT_ID ( 'FYAO_getGuiaRemisionByGuiaRemisionID', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getGuiaRemisionByGuiaRemisionID
GO
CREATE PROCEDURE FYAO_getGuiaRemisionByGuiaRemisionID
 @GuiaRemisionID int
AS      
BEGIN  
	select Gr.GuiaRemisionID,Gr.Serie,Gr.NroGuiaRemision,right('000000' + cast(Gr.NroGuiaRemision as varchar(6)), 6) NroGuiaRemisionDesc,
	Gr.ClienteID,Cli.NombreCliente,Cli.RUC,Cli.DNI,Gr.PuntoPartida,Gr.PuntoLlegada,Gr.PuntoLlegadaDep Departamento,Gr.PuntoLlegadaProv Provincia,Gr.PuntoLlegadaDist Distrito,Gr.FechaCreacion,Gr.FechaIniTraslado,NombreTransportista,RUCTransportista,
	Gr.NombreConductor,Gr.Brevete,Gr.ModeloAuto,Gr.PlacaAuto,Gr.MotivoTraslado,right('000000' + cast(Gr.NroVenta1 as varchar(6)), 6) NroComprobanteDesc,
	right('000000' + cast(Gr.NroPedido as varchar(6)), 6) NroPedidoDesc,Gr.TipoComprobante
	from GuiaRemision GR inner join dbo.Cliente Cli 
	on Gr.ClienteID=Cli.ClienteID /*inner join Direccion Dir 
	on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1) inner join Departamento Dpto on Dir.DepartamentoID=Dpto.DepartamentoID
	inner join Provincia Prv on Dir.ProvinciaID=Prv.ProvinciaID inner join Distrito Dst on Dir.DistritoID=Dst.DistritoID*/
	where Gr.GuiaRemisionID=@GuiaRemisionID
END
GO

IF OBJECT_ID ( 'FYAO_getGuiaRemisionByNroGuiaRemision', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getGuiaRemisionByNroGuiaRemision
GO
CREATE PROCEDURE FYAO_getGuiaRemisionByNroGuiaRemision
 @NroGuiaRemision int
AS      
BEGIN  
	select Gr.GuiaRemisionID,Gr.Serie,Gr.NroGuiaRemision,right('000000' + cast(Gr.NroGuiaRemision as varchar(6)), 6) NroGuiaRemisionDesc,
	Gr.ClienteID,Cli.NombreCliente,Cli.RUC,Cli.DNI,Gr.PuntoPartida,Gr.PuntoLlegada,Dpto.Departamento,Prv.Provincia,Dst.Distrito,Gr.FechaCreacion,Gr.FechaIniTraslado,NombreTransportista,RUCTransportista,
	Gr.NombreConductor,Gr.Brevete,Gr.ModeloAuto,Gr.PlacaAuto,Gr.MotivoTraslado,right('000000' + cast(Gr.NroVenta1 as varchar(6)), 6) NroComprobanteDesc,
	right('000000' + cast(Gr.NroPedido as varchar(6)), 6) NroPedidoDesc,Gr.TipoComprobante
	from GuiaRemision GR inner join dbo.Cliente Cli 
	on Gr.ClienteID=Cli.ClienteID inner join Direccion Dir 
	on (Cli.ClienteID=Dir.ClienteID and Dir.EsPrincipal=1) inner join Departamento Dpto on Dir.DepartamentoID=Dpto.DepartamentoID
	inner join Provincia Prv on Dir.ProvinciaID=Prv.ProvinciaID inner join Distrito Dst on Dir.DistritoID=Dst.DistritoID
	where Gr.NroGuiaRemision=@NroGuiaRemision
END
GO
IF OBJECT_ID ( 'GetVentaByVentaID_TipoVenta', 'P' ) IS NOT NULL 
    DROP PROCEDURE GetVentaByVentaID_TipoVenta
GO
CREATE PROCEDURE GetVentaByVentaID_TipoVenta
	@NroVenta int, 
	@TipoVenta char(1)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

SET Language Spanish
SELECT c.NombreCliente , c.RUC, c.DNI, c.Direccion + ' - ' + dis.Distrito + ' - ' + pro.Provincia + '-' +  dpto.Departamento as Direccion, isnull(ped.NroPedido,'-') as NroPedido, 
isnull(g.NroGuiaRemision,'-') as NroGuiaRemision, v.FechaCreacion, v.IGV, datepart(d,v.FechaPago) as DiaCancelado , (SELECT DATENAME(month, v.FechaPago)) AS MesEnLetrasCancelado ,
datepart(MM,v.FechaPago) as MesCancelado, datepart(yy,v.FechaPago) as AnioCancelado ,
datepart(d,v.FechaCreacion) as Dia , (SELECT DATENAME(month, v.FechaCreacion)) AS MesEnLetras ,datepart(MM,v.FechaCreacion) as Mes,  datepart(yy,v.FechaCreacion) as Anio ,
dv.Cantidad, p.DescripcionProducto, dv.PrecioUnitario, isnull(dv.Cantidad,0) * isnull(dv.PrecioUnitario,0) as Importe  FROM Venta v
INNER JOIN DetalleVenta dv on v.VentaID = dv.VentaID
INNER JOIN Producto p on p.ProductoID = dv.ProductoID
INNER JOIN Cliente c on c.ClienteID = v.ClienteID
LEFT JOIN Pedido ped on ped.PedidoID = v.PedidoID
LEFT JOIN Direccion dir on dir.ClienteID = v.ClienteID and dir.EsPrincipal = 1
INNER JOIN Distrito dis on dis.DistritoID = dir.DistritoID
INNER JOIN Departamento dpto on dpto.DepartamentoID = dir.DepartamentoID
INNER JOIN Provincia pro on pro.ProvinciaID = dir.ProvinciaID
LEFT JOIN GuiaRemision g on g.GuiaRemisionID = v.GuiaRemisionID
where v.NroVenta= @NroVenta and v.TipoVenta = @TipoVenta

END
GO
--Validacion de nro de documento
IF OBJECT_ID ( 'FYAO_ValidateExintingOrderNumber', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_ValidateExintingOrderNumber
GO
CREATE PROCEDURE FYAO_ValidateExintingOrderNumber --'0','0','0',1
 @Tipo	varchar(2),
 @NroDocumento	int
AS
BEGIN

IF @Tipo = 'F'
	select count(*) NroOrden from venta where NroVenta = @NroDocumento and TipoVenta = 'F'
ELSE IF @Tipo = 'B'
	select count(*) NroOrden from venta where NroVenta = @NroDocumento and TipoVenta = 'B'
ELSE IF @Tipo = 'GI'
	select count(*) NroOrden from pedido where NroPedido = @NroDocumento 
ELSE IF @Tipo = 'GR'
	select count(*) NroOrden from GuiaRemision where NroGuiaRemision = @NroDocumento 

END
go

IF OBJECT_ID ( 'FYAO_getReporteVenta_Del_Dia', 'P' ) IS NOT NULL 
    DROP PROCEDURE FYAO_getReporteVenta_Del_Dia
GO
CREATE PROCEDURE FYAO_getReporteVenta_Del_Dia 
 @FechaInicial datetime,
 @FechaFinal  datetime
AS          
BEGIN 
	SELECT        c.NombreCliente, c.RUC, c.DNI, c.Direccion, ISNULL(ped.NroPedido, '-') AS NroPedido, ISNULL(g.NroGuiaRemision, '-') AS NroGuiaRemision, v.FechaCreacion, v.IGV, 
							 v.NroVenta, DATEPART(d, v.FechaCreacion) AS Dia,
								 (SELECT        DATENAME(month, v.FechaCreacion) AS Expr1) AS Mes, SUBSTRING(CONVERT(varchar(4), DATEPART(yy, v.FechaCreacion)), 3, 4) AS Anio, 
							 CASE WHEN v.TipoVenta = 'F' THEN 'FACTURA' ELSE 'BOLETA' END AS TipoVenta, dv.Cantidad, dv.PrecioUnitario, ISNULL(dv.Cantidad, 0) 
							 * ISNULL(dv.PrecioUnitario, 0) AS Importe, ven.NombreVendedor, ven.ApellidoVendedor, p.DescripcionProducto, p.CodigoProducto, p.Caracteristica, 
							 v.MontoTotal
	FROM            Venta AS v INNER JOIN
							 DetalleVenta AS dv ON v.VentaID = dv.VentaID INNER JOIN
							 Producto AS p ON p.ProductoID = dv.ProductoID INNER JOIN
							 Cliente AS c ON c.ClienteID = v.ClienteID INNER JOIN
							 Vendedor AS ven ON ven.VendedorID = v.VendedorID LEFT OUTER JOIN
							 Pedido AS ped ON ped.PedidoID = v.PedidoID LEFT OUTER JOIN
							 GuiaRemision AS g ON g.GuiaRemisionID = v.GuiaRemisionID
	WHERE (cast(v.FechaCreacion as DATE)  BETWEEN cast(@FechaInicial as DATE)   AND cast(@FechaFinal as DATE)) 
END      